Skip to content

Add Slon fortunes benchmarks - #2

Open
sebastienros wants to merge 137 commits into
draghidev:experiment/reader-collect-zero-copyfrom
sebastienros:sebros/slon-benchmarks
Open

Add Slon fortunes benchmarks#2
sebastienros wants to merge 137 commits into
draghidev:experiment/reader-collect-zero-copyfrom
sebastienros:sebros/slon-benchmarks

Conversation

@sebastienros

@sebastienros sebastienros commented Aug 27, 2026

Copy link
Copy Markdown

Slon needs an end-to-end TechEmpower Fortunes workload that compares its pipelined PostgreSQL path with Npgsql under equivalent materialization and rendering behavior.

This adds Minimal API and low-level Kestrel Platform benchmark applications. Both drivers materialize messages as strings, append and sort the same model, and render the same RazorSlices template. The Slon path maps standard PostgreSQL connection settings into SlonDataSourceOptions, prepares one data-source-bound command at startup, reuses it concurrently with cancellation, and applies explicit pool and per-wire pipeline limits.

The accompanying Crank configurations clone Slon and pipelining as sibling sources, run only the Slon and Npgsql PostgreSQL jobs, and provide matching 512-connection /fortunes scenarios.

Validation included a full Release solution build, the existing test suite (792 passed, 4 skipped), all four app/driver combinations against PostgreSQL with identical sorted and HTML-escaped output, and Crank debug expansion for both configurations.

Run the benchmarks

The fork repository and branch overrides keep both the raw configuration and cloned Slon source pinned to this PR:

# Minimal: Slon
crank --config https://raw.githubusercontent.com/sebastienros/slon/refs/heads/sebros/slon-benchmarks/Slon.Benchmarks/Slon.Fortunes.Minimal/minimal-fortunes.benchmarks.yml --scenario minimal-postgresql-slon --profile aspnet-gold-lin --application.sources.Slon.repository https://github.com/sebastienros/slon.git --application.sources.Slon.branchOrCommit sebros/slon-benchmarks --json minimal-slon.json

# Minimal: Npgsql
crank --config https://raw.githubusercontent.com/sebastienros/slon/refs/heads/sebros/slon-benchmarks/Slon.Benchmarks/Slon.Fortunes.Minimal/minimal-fortunes.benchmarks.yml --scenario minimal-postgresql-npgsql --profile aspnet-gold-lin --application.sources.Slon.repository https://github.com/sebastienros/slon.git --application.sources.Slon.branchOrCommit sebros/slon-benchmarks --json minimal-npgsql.json

# Platform: Slon
crank --config https://raw.githubusercontent.com/sebastienros/slon/refs/heads/sebros/slon-benchmarks/Slon.Benchmarks/Slon.Fortunes.Platform/platform-fortunes.benchmarks.yml --scenario platform-postgresql-slon --profile aspnet-gold-lin --application.sources.Slon.repository https://github.com/sebastienros/slon.git --application.sources.Slon.branchOrCommit sebros/slon-benchmarks --json platform-slon.json

# Platform: Npgsql
crank --config https://raw.githubusercontent.com/sebastienros/slon/refs/heads/sebros/slon-benchmarks/Slon.Benchmarks/Slon.Fortunes.Platform/platform-fortunes.benchmarks.yml --scenario platform-postgresql-npgsql --profile aspnet-gold-lin --application.sources.Slon.repository https://github.com/sebastienros/slon.git --application.sources.Slon.branchOrCommit sebros/slon-benchmarks --json platform-npgsql.json

@NinoFloris
NinoFloris force-pushed the sebros/slon-benchmarks branch 5 times, most recently from 3ca31ea to e6b470b Compare August 27, 2026 22:36
@NinoFloris
NinoFloris changed the base branch from main to experiment/reader-driven-specialization August 27, 2026 22:46
@NinoFloris
NinoFloris force-pushed the experiment/reader-driven-specialization branch from 6ed140f to 5257a8b Compare August 27, 2026 22:52
@NinoFloris
NinoFloris force-pushed the sebros/slon-benchmarks branch from e6b470b to ae7ab2d Compare August 27, 2026 22:52
@NinoFloris
NinoFloris force-pushed the experiment/reader-driven-specialization branch from 5257a8b to 830d620 Compare August 27, 2026 23:12
@NinoFloris
NinoFloris force-pushed the sebros/slon-benchmarks branch 3 times, most recently from 3e0edae to 298e9b3 Compare August 28, 2026 00:50
@NinoFloris
NinoFloris force-pushed the experiment/reader-driven-specialization branch from 9f32d1c to cc6cc34 Compare August 28, 2026 12:37
@NinoFloris
NinoFloris force-pushed the sebros/slon-benchmarks branch from 298e9b3 to fda44d3 Compare August 28, 2026 12:37
@NinoFloris
NinoFloris changed the base branch from experiment/reader-driven-specialization to experiment/reader-collect August 28, 2026 21:55
@NinoFloris
NinoFloris force-pushed the sebros/slon-benchmarks branch 2 times, most recently from a0ce3bd to f9ebf75 Compare August 28, 2026 22:20
@NinoFloris
NinoFloris changed the base branch from experiment/reader-collect to experiment/reader-collect-zero-copy August 31, 2026 15:54
@NinoFloris
NinoFloris force-pushed the sebros/slon-benchmarks branch from f9ebf75 to 4d71a3e Compare August 31, 2026 15:55
NinoFloris and others added 28 commits September 4, 2026 17:51
Port the Minimal API and low-level Platform fortunes workloads with comparable Slon and Npgsql PostgreSQL paths, plus multi-source Crank scenarios.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Use an atomic round-robin protocol pool so the Fortunes scenarios measure Slon command flows independently of the production datasource pool.
@NinoFloris
NinoFloris force-pushed the sebros/slon-benchmarks branch from 4d71a3e to 1fdcc48 Compare September 7, 2026 11:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants